package commDao

import (
	"github.com/TarsCloud/TarsGo/tars"
	"gorm.io/gorm"
	"reflect"
)

// 异步写日志（通用插入日志接口：支持批量插入）
// 	备注：优先推荐使用异步写日志，因为大部分入库操作无须堵塞业务逻辑
// 	参数说明：
//		db: 访问db对象 gorm.DB
//		entitys：
// 			单个插入：&entity
// 			批量插入：[]*entity
func CommAsyncLog2DB(db *gorm.DB, entitys interface{}) {
	go func() {
		CommSyncLog2DB(db, entitys)
	}()
}

// 同步写日志（通用插入日志接口：支持批量插入）
// 	参数说明：
//		db: 访问db对象 gorm.DB
//		entitys：
// 			单个插入：&entity
// 			批量插入：[]*entity
func CommSyncLog2DB(db *gorm.DB, entitys interface{}) error {
	CommDaoEntity := New(db)
	err := CommDaoEntity.Add(entitys)
	if nil != err {
		rfTyp := reflect.TypeOf(entitys)
		if reflect.Slice == rfTyp.Kind() {
			rfVal := reflect.ValueOf(entitys)
			for i := 0; i < rfVal.Len(); i++ {
				tars.TLOG.Errorf("日志入库失败，日志内容：%+v",
										rfVal.Index(i).Interface())
			}
		} else {
			tars.TLOG.Errorf("日志入库失败，日志内容：%+v", entitys)
		}
	}
	return err
}
